約 2,764,102 件
https://w.atwiki.jp/ntemacs/pages/69.html
【トピック】 ● WSL_トピック ● Docker_トピック ● Xpra_トピック 【お知らせ】 2022/10/14 追記 本ページの設定を多少変更すると WSLg で動かすこともできます。WSLg ではキーボードの設定がうまく行われない場合があるようですので、その場合は以下のどちらかの行の設定を行ってください。 setxkbmap -layout us setxkbmap -layout jp 2022/10/14 追記 X11 サーバを GWSL とするように、全体的な見直しを行いました。 2022/04/19 追記 2021年の補完UI事情とEmacs28に標準添付されるfido-vertical-modeについて https //qiita.com/tadsan/items/f1738cb463b1ec536f84 2022/01/04 追記 興味深いコマンドを2つ紹介します。 https //linuxcommand.net/stdbuf/ https //vmi.jp/software/cygwin/cocot.html 2021/12/10 追記 2019/04/22 追記 で winsudo というコマンドを紹介しておりますが、gsudo というコマンドがあるようです。まだ使ってみてはおりませんが、紹介します。 https //qiita.com/_masa_u/items/a799745d70b30c32a03b https //github.com/gerardog/gsudo 2021/09/17 追記 WSL2 で WSLg と GWSL を利用する場合の比較をしてみました。GWSL は VcXsrv を利用しているので、GWSL に記載してある内容は VcXsrv を利用する場合にも当てはまります。 <GWSL> ・新しい Microsoft IME を選択しているとカーソルのレスポンスが悪くなる(古いMicrosoft IME や Google日本語入力ではこの問題は発生しません) ・Emacs 起動時にウインドウが小さく表示される問題が発生する( 13) に回避対策の記載があります) ・DISPLAY 環境変数を独自に設定する必要がある( 0 では動きません) <WSLg> ・カーソルが遅くなる問題が発生しない ・Emacs 起動時にウインドウが小さく表示される問題が発生しない ・DISPLAY 環境変数が 0 で動作する ・Windows 10 では動作しない ⇒ (2022/11/18 追記)Windows 10 21H1 以降では、パッチ KB5020030 をインストールし、Microsoft Store版 WSLv1.0.0 をインストールすると動作するようです。 ・Emacs を最大化しても完全な最大化とならない(下部の最大化がならない部分から背景が見えてしまいます) ⇒ (2022/11/18 追記)Microsoft Store版 WSLv1.0.0 では改善していることを確認しました。 ・ウインドウ枠が独自のため、アクティブなウインドウの状況が分かりづらい(Windows でアクティブウインドウのタイトルバーの色を変える設定にしていても、WSLg のウインドウは対象になりません) ・Windows のウィンドウの操作作法が利用できない(画面の上画面外へのドラックで画面の最大化がされるなどの操作が使えません) 現時点では、後半の2つの問題を許容できないことから、GWSL を選択して利用しています。 2021/08/09 追記 X Window のキーリピートの速度を変更するには、以下のようなコマンドで対応できます。なお、 2020/08/08 追記 に記載しているとおり、VcXsrv は 新しい Microsoft IME と相性が良くありません。VcXsrv を利用する場合は、IME に Google 日本語入力や古い Microsoft IME を選択するようにしてください。 $ xset r rate 400 40 2021/06/25 追記 Emacs の設定は、leaf.el を使うのが人気のようです。お試しください。 https //qiita.com/conao3/items/347d7e472afd0c58fbd7 2021/06/17 追記 本ページでは、補完 UI として helm を紹介していますが、主流は変わりつつあるようです。以下が参考となりますので紹介させていただきます。 https //blog.tomoya.dev/posts/a-new-wave-has-arrived-at-emacs/ 2021/02/05 追記 本ページの内容は WSL2 でも動作します。DrvFs や VolFs の記載がある場合には、Windows 側のファイルシステム、WSL2 側のファイルシステムと読み替えてください。 2020/08/08 追記 Windows 10 ver 2004 の WSL/WSL2 で Emacs を VcXsrv に接続して使っていると、カーソル移動後の停止がワンテンポずれる症状が発生します。これは、IME に新しい Micorosoft IME が選択されているときに発生することが分かりました。IME に Google 日本語入力や古い Microsoft IME が選択されているときには発生しません。WSL/WSL2 の Emacs では、mozc_emacs_helper.exe を使って Google 日本語入力と連携して日本語入力を行っているため、なかなか気づきませんでした。 ⇒(2020/08/23 追記)この現象は MobaXterm の X サーバでは発生しないようです。 2020/08/06 追記 WSL2 から VcXsrv(GWSL の中でも利用)へのアクセスを許可する方法として、vcxsrv.exe の起動時に -ac オプションを付ける(Disable access control とする)方法があります。この方法は、以下のサイトで紹介しているようなセキュリティ的な問題が発生するので、避けることをお勧めします。 https //itpass.scitec.kobe-u.ac.jp/~itpass/hiki/hiki.cgi?%5BExp2010%5DX+Window+System#X+-E3-81-AE-E3-82-BB-E3-82-AD-E3-83-A5-E3-83-AA-E3-83-86-E3-82-A3 アクセスをコントロールする方法は、以下のようなものがあります。 xhost でアクセス許可を行う(説明の 10) に設定例あり) xauth でアクセス許可を行う ssh の -Y オプション(ForwardX11Trusted)を使う(-X オプション(ForwardX11)の場合、config に XAuthLocation の設定をしてもうまく機能しませんでした。ネットにも同様の報告があります。) ssh でポートフォワーディングをして使う 2020/07/14 追記 次のページを作成しました。この下の追記の設定とセットでご利用ください。 Windows の ssh から WSL2 の sshd に接続するための設定 2019/07/16 追記 ssh-agent-wsl を利用すると、Windows 側の ssh-agent を WSL から利用できるようです。 https //github.com/rupor-github/ssh-agent-wsl https //qiita.com/q1701/items/3cdc2d7ef7a3539f351d 次の設定を ~/.bash_profile に追加するのが良いと思います。 eval $( ssh-agent-wsl コマンドを置いた Windows のパス /ssh-agent-wsl -a ~/.ssh/ssh-agent-wsl.sock -r) ssh-add で登録した秘密鍵が保持されパスフレーズの入力が不要となるため、次の設定で紹介している wslemacs-start.exe との相性が良くなります。 WSL の emacsclient を Windows から利用するための設定 ⇒(2020/07/10 追記)同じ開発者から新しいプロジェクトがリリースされていました。 https //github.com/rupor-github/wsl-ssh-agent https //hnakamur.github.io/blog/2020/03/06/setup-wsl-ssh-agent/ 使ってみましたが、wsl-ssh-agent はまだ WSL2 で利用できないようですので、ssh-aget-wsl を使い続けることにしました。 2020/04/28 追記 新しい Linux ディストリビューションへのホームディレクトリの移行には、以下のバッチファイルをお試しください。バッチファイルですので、コマンドプロンプトからの起動となります。(変数の設定値は適宜変更してご利用ください。) set home_dir=user set src_distro=Ubuntu-18.04 set dst_distro=Ubuntu-20.04 wsl -d %dst_distro% -u root bash -c "mv /home/%home_dir% /home/%home_dir%.orig" wsl -d %src_distro% -u root bash -c "(cd /home; tar cvf - %home_dir%)" | wsl -d %dst_distro% -u root bash -c "(cd /home; tar xvf -)" 2019/09/20 追記 Xサーバを利用する際に「全角/半角」キーリピート問題が発生する場合には、次のページを参考に対応してください。(私は US キーボードを使っているため、この問題には遭遇していません。) https //seesaawiki.jp/w/kou1okada/d/20160905%3A%20Ubuntu%20%A4%CE%C6%FC%CB%DC%B8%EC%C6%FE%CE%CF%B5%A1%C7%BD%A4%CE%C9%D4%B6%F1%B9%E7 2019/08/09 追記 13) に「<フレームの高さを補正する設定>」の説明を追加しました。WSL Emacs on VcXsrv でフレームを開く際、高さが低く作成される状況が改善されます。 2019/04/22 追記 WSL から Windows の exe コマンドを管理者権限で実行するコマンド winsudo を公開しました。お試しください。 https //github.com/smzht/wsl-utils#-winsudo なお、このコマンドを利用する際は、【お知らせ】 の 2019/03/04 追記 に記載した「exec /dev/tty」の設定を解除する必要があります。解除時に利用できる exe コマンドを実行するためのコマンド win も併せて公開していますので、お試しください。 https //github.com/smzht/wsl-utils#-win 2019/04/19 追記 WSL で Emacs を使っている理由の大きな一つに、次の設定をすることにより Emacs の Dired で Windows ショートカットのハンドリングができることがあります。Windows ショートカットは Windows のデスクトップ環境で頻繁に使われており、ファイルシステムに依存していない一般ファイルであることから可搬性も高く(どこにでも移動や複写ができる)、Emacs の Dired で使えると非常に便利です。是非お試しください。 Windows ショートカットを dired と連携して使うための設定 WSL で NTFS シンボリックリンクや Windows ショートカットを作成するための設定 ディレクトリの Windows ショートカットがある場合、shell の cd コマンドでその Windows ショートカットを辿ることはできません。そのために、次の設定と組み合わせた利用をお勧めします。この設定は tramp の接続先でも動作します。 shellバッファ を簡単にポップアップするための設定 以上の設定は、すべて本ページで紹介しているものとなります。 2019/03/04 追記 Windows 10 1809 にアップデートしたところ、Emacs の shell-mode で exe コマンドを実行できなくなりました。(実行すると、プロンプトが帰ってこなくなります。)次のページで同様の問題が報告されています。 https //github.com/Microsoft/WSL/issues/3895 回避策として、以下の方法があるようです。 ipconfig.exe | cat のように、パイプで cat につなげる ipconfig.exe /dev/tty のように、/dev/tty にリダイレクトする 次の設定をする。(.bashrc に設定することで shell 起動時に有効にできます。ただし、【トピック】 の 2019/04/22 追記 に記載したとおり、不都合が発生するコマンドもありますので、ご留意ください。) $ exec /dev/tty 2019/03/13 追記 本設定で利用している Xサーバ VcXsrv(GWSL の中でも利用)について、次のページに不具合情報が報告されています。コピペ時の「–」の欠落などは注意が必要と思いました。内容を確認してみてください。 https //fujii.github.io/2018/08/30/emacs-on-wslinux/ ⇒(2021/09/17 追記)「–」の欠落の問題は、VcXsrv の最新のバージョンでは発生しないようです。 【本題】 Windows Subsystem for Linux で Emacs を使うための設定です。 ※ 以下では、WSL で Emacs を使うために推奨される設定のみを紹介しています。Emacs を使うための基本的な設定は別途必要です。 mozc_emacs_helper.exe で Windows 側の Google 日本語入力と連携可能。ユーザ辞書も一元管理! tramp で Linux サーバや Docker とも連携可能。GWSL(VcXsrv)を使っているので、X クライアントソフトも起動できる! eww でブラウザとしても利用可能。英語ページは google-translate で瞬時に翻訳! twitter も利用可能。アイコンも表示できるので、投稿者の識別が容易! 1) Windows 10 1903 以降をインストールする。 また、アクティブウインドウのタイトルバーの色を変更するための次の設定を有効にする。(オプション) https //www.softantenna.com/wp/tips/windows-10-change-titlebar-color/ ※ 設定すると、マルチディスプレイ使用時にアクティブウインドウの確認がし易くなります。 2) Microsoft Store から GWSL(X11 サーバアプリ)をインストールする。 https //opticos.github.io/gwsl/ https //opticos.github.io/gwsl/tutorials/manual.html 3) Windows Subsystem for Linux を有効にし、Microsoft Store から Ubuntu-22.04 をインストールした後、コンソールを起動する。 https //docs.microsoft.com/ja-jp/windows/wsl/install-win10 4) WSL に複数の Linux のディストリビューションをインストールしている場合は、コマンドプロンプトで次のコマンドを実行し、Ubuntu-22.04 ディストリビューションをデフォルトにしておく。(Windows 側から、bash.exe や wsl.exe を実行した際に使われる WSL ディストリビューションとなる。) wsl -l wsl -s Ubuntu-22.04 5) インターネットにプロキシを介して接続している場合は、.bashrc に http_proxy 等の環境変数を設定し、コンソールを再起動する。 6) 必要であれば sudo をパスワード無しで利用できるように設定する。 次のコマンドを実行し、 $ sudo -s # EDITOR=vi visudo 最終行に次の行を追加する。( username の部分は WSL の利用ユーザに変更する。) username ALL=(root) NOPASSWD ALL ※ wsl のユーザは sudo グループに所属しているため、%sudo の行以降に設定を追加する必要があるようです。 ※ /etc/sudoers.d ディレクトリ配下にファイルを置く方法もあります。この方法を採る場合は、sudo -s で root になってから作業を行うと、visudo -c でエラーが発生した場合に対処できると思います。 https //qiita.com/buchyanS/items/d240ea7e883bea734718 https //hnakamur.github.io/blog/2012/05/04/use-slash-etc-slash-sudoers-dot-d-slash/ 7) Ubuntu のアップデートおよび設定を行う。 $ sudo -E apt update $ sudo -E apt upgrade ※ プロキシが必要な環境下では、apt や add-apt-repository 実行時の sudo に -E オプションを付けて http* 環境変数を引き継ぐようにしてください。 http //qiita.com/aKenjiKato/items/18f9b8553f8ad4117d79 また、locale を変更する。 $ sudo -E apt install language-pack-ja language-pack-gnome-ja $ sudo update-locale LANG=ja_JP.UTF-8 必要であれば、日本語マニュアルをインストールする。 $ sudo -E apt install manpages-ja manpages-ja-dev さらに、タイムゾーンを JST にする。 $ sudo dpkg-reconfigure tzdata 8) Emacs 等をインストールする。 $ sudo -E apt install emacs emacs-el $ sudo -E apt install cmigemo ※ Ubuntu-22.04 では emacs-27 がインストールされます。emacs-28 をインストールしたい場合には、以下を実行してください。 $ sudo -E apt remove emacs emacs-el $ sudo -E apt autoremove $ sudo -E add-apt-repository ppa kelleyk/emacs $ sudo -E apt update $ sudo -E apt install emacs28 emacs28-el $ sudo -E apt install cmigemo 9) x11-xserver-utils パッケージをインストールする。 $ sudo -E apt install x11-xserver-utils 10) ログイン時の設定を行う。 ~/.bash_profile に次の設定を行う。 if which tasklist.exe /dev/null ! tasklist.exe | grep -q '^GWSL_vcxsrv'; then ( cmd.exe /c GWSL.exe /dev/null 2 1 sleep 3 if uname -v | grep -q 'Microsoft'; then export DISPLAY= 0 else export DISPLAY=$(ip route | awk '/^default/ {print $3; exit}') 0 xhost + $(ip -4 a show eth0 | grep -oP '(? =inet\s)\d+(\.\d+){3}') fi # access control を enabled にする xhost - ) fi [ -r ~/.bashrc ] source ~/.bashrc ※ 上記の設定は、22) で紹介している次の設定の wslemacs-start.exe を利用することにより、GWSL.exe を自動起動することを想定しています。 WSL の emacsclient を Windows から利用するための設定 ※ GWSL の内部から起動されている VcXsrv には、-noprimary オプションを付ける必要があります。VcXsrv のオプションを指定するには、GWSLアイコンの右クリック - XServer Profiles - Add A Profile で新しい Custom Profile を作成してください。設定後、メニューに追加された Custom profile を選択して有効とする必要があります。また、GWSL を一度終了し、wslemacs-start.exe を再起動するなどして上記のスクリプトを実行することで、X Window Server のセキュリティの設定が行われるようにしてください。なお、設定するオプションには次の値をお勧めします。 -multiwindow -clipboard -noprimary -wgl ※ VcXsrv のオプションは次のページを参照してください。 https //gist.github.com/ctaggart/68ead4d0d942b240061086f4ba587f5f ※ GWSL のメニューから、DPI Scaling Mode を選択することができます。初期値は「Linux」となっているようですが、私はリモートデスクトップ利用時に DPI の問題が発生したため、「Windows」に変更して利用しています。 ※ GWSL に X クライアントから接続できない場合は、次の対応をお試しください。 1. 「コントロールパネル」- 「システムとセキュリティ」- 「Windows Defender ファイアウォールによる PC の保護」を開き、メニュから「詳細設定」をクリックする 2. 「受信の規則」をクリックし、「GWSL VcXsrv windows xserver」と「GWSL PulseAudio server」の行があれば、全て削除する 3. Windows の GWSL アプリを起動する(既に起動していれば、再起動する) 4. VcXsrv のファイアウォールの通信許可設定ダイアログ画面が開くので、「パブリックネットワーク」のチェックボックスにチェックを入れ、通信を許可する また、~/.bashrc に次の設定を追加する。 if [ "$INSIDE_EMACS" ]; then TERM=eterm-color fi umask 022 if uname -v | grep -q 'Microsoft'; then export DISPLAY= 0 else export DISPLAY=$(ip route | awk '/^default/ {print $3; exit}') 0 fi unset LIBGL_ALWAYS_INDIRECT ※ LIBGL_ALWAYS_INDIRECT の設定は unset にしました。VcXsrv(GWSL の中で利用)の -wgl オプションとの組み合わせで、mesa の glxgears が動くことを確認しています。(ネットには、VcXsrv のオプションを -nowgl とすべきとの情報が多くありますが、-wgl で動いたので良しとしました。)次のページに関連する情報があります。 https //x.cygwin.com/docs/ug/using-glx.html https //www.web-dev-qa-db-ja.com/ja/xorg/libglalwaysindirect-1%E3%81%AF%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/957258497/ ※ Ubuntu が提供する .bashrc には、初めの方に次の設定があり、bash がインターラクティブモードで起動したとき以外は以降が実行されないようになっています。.bashrc に設定を追記する場合は、追記する場所にご留意ください。 # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac 11) 次のサイトから Migu 1M フォントをダウンロードして、ttf ファイルを ~/.local/share/fonts ディレクトリ配下にコピーする。(fonts ディレクトリ配下に、サブディレクトリを作って置いても大丈夫です。) http //mix-mplus-ipa.osdn.jp/migu/ ※ 生成が必要ですが Ricty 系もお勧めです。 本設定では使いませんが、Windows のフォントも WSL で使いたければ次のコマンドを実行する。 $ ln -s /mnt/c/Windows/Fonts ~/.local/share/fonts/windows 最後に次のコマンドを実行する。 $ fc-cache -fv 12) ~/.emacs.d/init.el 等に次のとおりのフォントの設定を行う。 ;; デフォルト フォント (set-face-attribute 'default nil family "Migu 1M" height 120) ;; プロポーショナル フォント (set-face-attribute 'variable-pitch nil family "Migu 1M" height 120) ;; 等幅フォント (set-face-attribute 'fixed-pitch nil family "Migu 1M" height 120) ;; ツールチップ表示フォント (set-face-attribute 'tooltip nil family "Migu 1M" height 90) ※ この設定は gnupack の init.el にある設定を転記したものです。 13) さらに ~/.emacs.d/init.el 等に次の設定を行う。 <色の設定> ;; 色を設定する (add-to-list 'default-frame-alist '(foreground-color . "white")) (add-to-list 'default-frame-alist '(background-color . "black")) <フレームの高さを補正する設定> (defun reset-frame-parameter (frame) (sleep-for 0.1) (set-frame-parameter frame 'height 32)) (add-hook 'after-make-frame-functions #'reset-frame-parameter) <coding-system の設定> (prefer-coding-system 'utf-8-unix) ;; プロセスが出力する文字コードを判定して、process-coding-system の DECODING の設定値を決定する (setq default-process-coding-system '(undecided-dos . utf-8-unix)) ※ 設定値の car を "undecided-dos" にしておくと、Windows コマンドの出力にも柔軟に対応できます。関連して 29) の説明も参照してください。 <shell の設定> (setq shell-file-name "/bin/bash") (setq shell-command-switch "-c") (setq explicit-shell-file-name shell-file-name) <migemo の設定> (setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs")) (setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict") (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil) (setq migemo-coding-system 'utf-8-unix) (load-library "migemo") (migemo-init) 14) WSL のコンソールを再起動してから Emacs を起動し、X Window サーバ上に表示することを確認する。 15) 次を参考に emacs-mozc の設定を行う。 emacs-mozc を動かすための設定(WSL 設定編) ※ 以降はオプションです。 20) さらに次の設定を行う。これで、いろいろな操作が helm を通してできるようになる。 helm を使うための設定 21) さらに次の設定を行う。これで、find-file コマンドなどで Windows パスや UNC パスを直接利用可能となる。 Windowsパス と UNCパス を使えるようにするための設定(WSL 設定編) ※ この設定は、以降の 22) と 23) を使うために必要となります。 22) さらに次の設定を行う。これで、Windows 側から emacsclient が利用可能となる。 WSL の emacsclient を Windows から利用するための設定 23) さらに次の設定を行う。これで、dired で Windows ショートカットがシンボリックリンクのように利用可能となる。 Windows ショートカットを dired と連携して使うための設定 24) さらに次の設定を行う。これで、dired で ディレクトリのシンボリックリンクを実体のパスで開くことができるようになる。 dired でディレクトリのシンボリックリンクを実体のパスで開くための設定 ※ (setq-default find-file-visit-truename t) の設定を行っていない場合に意味のある設定となります。 25) さらに次の設定を行う。これで、dired で DrvFs ファイルシステム上に NTFS シンボリックリンクを作成できるようになる。また、Windows ショートカットも作成可能となる。 WSL で NTFS シンボリックリンクや Windows ショートカットを作成するための設定 ※ Windows ショートカットはファイルシステムに依存していないリンクファイルですので、ハンドリングが容易です。VolFs の他、tramp の接続先にも複写することができます。私は、DrvFs 上に置くリンクはできるだけショートカットを利用するようにしており、23) の設定をすることで dired から利用しています。 26) さらに次の設定を行う。これで、dired が Windows のファイラーのように利用できるようになる。 WSL で cygstart 的コマンドを使うための設定 dired を OS と連携して使うための設定 ※ こちらの設定もお勧めです。 singleton な動きをする cygstart 的コマンドを使うための設定 (WSL版) ※ 次の設定も行うと、Emacs で表示している URL を Windows のブラウザで開くことができます。 (require 'browse-url) (setq browse-url-browser-function 'browse-url-generic) (setq browse-url-generic-program "wslstart")) (global-set-key (kbd "C-c u") 'browse-url-at-point) 27) さらに次の設定を行う。これで、tramp の高速化が図られ、接続先の shell から Xクライアントが起動できるようになる。上記の「dired を OS と連携して使うための設定」と組み合わせると、xdg-open などを使ってリモートにあるドキュメント等が開けるようになる。(このページの最初の方にある画像の二番目のものは、この機能を使って表示したものです。) tramp を tramp-method “scp” で使うための設定 tramp による接続先で Xクライアント を実行するための設定 28) さらに次の設定を行う。これで、tramp 接続環境でも動作する shell-pop のような環境を利用できるようになる。 shellバッファ を簡単にポップアップするための設定 29) さらに次の設定を行う。これで、shell-mode で Windows のコマンドを発行しても、漢字が文字化けしなくなる。 shell-mode で複数の漢字コードを混在して利用できるようにするための設定 30) さらに次の設定を行う。これで Emacs のバッファの内容を Windows のテキストエディタを通して印刷できるようになる。 Notepad を使って印刷するための設定(WSL 設定編) 31) さらに次の設定を行う。これで Emacs から VSCode でファイルを開けるようになる。 WSL の Emacs から VSCode でファイルを開くための設定 32) さらに次の設定を行う。これで VSCode で開いているファイルを Emacs で開けるようになる。 VSCode で開いているファイルを WSL の Emacs で開くための設定 33) さらに次の「Emacs 全般で利用できる設定」や「説明ページを作るまでもない設定の紹介」の箇所にあるものから必要なものがあれば設定を行う。 https //w.atwiki.jp/ntemacs/ お勧めの設定は以下の辺りとなります。 helm から comint の入力履歴を検索するための設定 helm で peco もどきのコマンドを使うための設定 locate を使うための設定(WSL 設定編) ediff をスマートに使うための設定 elscreen を使うための設定 whitespace を使うための設定 cua-mode を使うための設定 multiple-cursors を使うための設定 google-translate を使いやすくするための設定 沢山開いているバッファをできるだけ一度に閉じるための設定 (global-set-key (kbd "M-c") (lambda () (interactive) (desktop-clear) (tramp-cleanup-all-connections))) カレントバッファを一発で閉じるための設定 (global-set-key (kbd "M-k") (lambda () (interactive) (kill-buffer (buffer-name)))) ウィンドウの右端で改行をするかどうかを切り替えるための設定 (global-set-key (kbd "C-c C- return ") 'toggle-truncate-lines) 横スクロールするための設定(キー設定が逆の感覚の方もいるかも) (global-set-key (kbd "C-,") 'scroll-left) ; のキー (global-set-key (kbd "C-.") 'scroll-right) ; のキー C-h を Backspace として使うための設定 https //qiita.com/takc923/items/e279f223dbb4040b1157 (define-key key-translation-map (kbd "C-h") (kbd " DEL ")) help の機能は、f1 キーで利用することができます。 34) 最後に次の設定を行う。これで Windows 全体を Emacsキーバインドで操作できるようになる。 Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版) 変更履歴 2017/05/23 このページを作成した。 2017/06/12 Emacs 起動時のエラーを抑制するため、LIBGL_ALWAYS_INDIRECT 環境変数の設定を追加した。 2017/07/04 色の設定を追加した。 2017/08/21 locale の設定を追加しました。 2017/08/21 Emacs-25 のインストールする方法を追記した。 2017/09/04 「w32-symlinks を dired と連携して使うための設定」を見直しバージョン「Windows ショートカットを dired と連携して使うための設定」のリンクに置き換えた。 2017/11/01 オプションの設定に「 WSL で NTFS シンボリックリンクを作成するための設定」を追加した。 2017/11/04 パスの途中に NTFS シンボリックリンクを含むファイルを削除しようとするとフリーズする問題の対策を追加した。 2017/11/06 Emacs を起動するスクリプトを追加し、VcXsrv が起動していない場合は事前に起動するように対応した。 2017/11/11 emacsclient を使うための説明を追記した。 2018/03/09 21) の設定を全面的に見直し、UNCパスの利用にも対応した。 2018/03/14 25) の設定を見直し、Windows ショートカットの作成にも対応した。 2018/03/15 29) に設定を新たに追加した。 2018/03/16 22) の説明の内容を整理した。 2018/03/20 30) の設定を wslstart を使った方法に見直した。 2018/03/21 26) の設定に browse-url を使うための設定を追記した。 2018/03/22 VcXsrv 上に立ち上げた Emacs でリージョンの選択をすると、選択しただけでリージョンの内容が Windows のクリップボードに登録される症状が発生していたのを対策した。 2018/03/22 21) の設定で、コンピュータ名が IPアドレスの UNC パスを mount した際でも正常に動作するように対応した。 2018/03/23 wsl コマンドを使っている設定について、高速化対策を行った。 2018/04/11 10) に日本語キーボードを使う場合に必要そうな設定とそのコメントを追記した。 2018/04/12 33) にお勧めの設定のリンクを追加した。 2018/05/11 8) に tramp 利用時の不具合についての対応策について追記した。 2018/05/11 7) にタイムゾーンを JST にする説明を追加した。 2018/06/19 8) に Emacs-26系で動作させるための説明を追記した。 2018/06/26 11) のフォントを置くディレクトリを、~/.fonts ディレクトリから ~/.local/share/fonts ディレクトリに変更した。 2018/07/30 13) に最低限必要な coding-system の設定を追記した。 2018/08/19 13) に cmigemo の設定を追記した。 2018/11/11 6) に sudo をパスワード無しで利用するための設定の説明を追加した。 2018/11/21 1) にアクティブウインドウのタイトルバーの色を変更するための設定の説明を追加しました。 2019/08/09 13) に「<フレームの高さを補正する設定>」の説明を追加した。 (function(i,s,o,g,r,a,m){i[ GoogleAnalyticsObject ]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document, script , //www.google-analytics.com/analytics.js , ga ); ga( create , UA-40267130-1 , atwiki.jp ); ga( send , pageview );
https://w.atwiki.jp/abwiki/pages/373.html
makefileの書き方 基本 ターゲット 依存ファイル コマンド コマンドの前にtabを忘れないこと。 マクロ 名前=文字 で定義。使うときは $(名前) とする。 cc=gcc files=a.c b.c test $(files) c.h $(cc) $(files) 依存 ターゲットを幾つか並べ、順番を大切にしたいとき。 a b コマンド1 b c コマンド2 コマンド2が実行され、コマンドが成功(戻り値が0)したときにコマンド1が実行される。 疑似ターゲット ファイルを冠しないターゲットのこと。 clean del *.obj みたいなの。
https://w.atwiki.jp/abdulladzhan/pages/26.html
makefileのメモ 1 ターゲット 依存ファイル コマンド ソースファイルfileA.cppをコンパイルして実行ファイルfileAを作る #Makefile fileA fileA.cpp g++ -o A fileA.cpp #eof ありがたみ無し。 2 1.fileA.cppはfileA.hをインクルードしている 2.fileA.cppを書き換えてmake 正常にコンパイル 3.fileA.hを書き換えてmake $make make all に対して行うべき事ではありません. 4.泣く. Makefileの修正 #Makefile .PHONY all all fileA fileA fileA.o g++ -Wall -o a.out fileA.o #fileAはfileA.oに依存している fileA.o fileA.cpp g++ -Wall -c fileA #fileA.oはfileA.cppに依存している fileA.o fileA.h #fileA.oはfileA.hに依存している .PHONY clean clean rm -rf fileA fileA.o #中間・実行ファイルの削除 #eof .PHONYとは同一フォルダ内に"all"というファイルがある場合に区別するための定義 これでfileA.hのみを書き換えた場合もmakeを行う. 3 複数のファイルを一度にコンパイルする fileA.cpp fileB.cpp fileC.cppの3つのファイルを同時にコンパイルしたい場合 #Makefile .PHONY all all file1 file2 file1 fileA.o g++ -Wall -o fileA fileA.o fileA.o fileA.cpp g++ -Wall -c fileA.cpp fileB fileB.o g++ -Wall -o fileB fileB.o fileB.o fileB.cpp g++ -Wall -c fileB.cpp fileC fileC.o g++ -Wall -o fileC fileC.o fileC.o fileC.cpp g++ -Wall -c fileC.cpp fileB.o fileB.h fileC.o fileC.h .PHONY clean clean rm -f fileA.o fileB.o fileC.o file1 file2 #eof これだと使いまわすのが面倒になっているのでマクロ #Makefile #SRC = fileA.cpp fileB.cpp fileC.cpp OBJ1 = fileA OBJ2 = fileB OBJ3 = fileC OBJS = $(SRC %.cpp=%.o) CXX = g++ CXXFLAGS = -Wall PROG = OBJ1 OBJ2 OBJ3 .PHONY all all $(PROG) .SUFFIXES .cpp .o $(OBJ1) $(OBJ1).o $(CXX) $(CXXFLAGS) -o $@ $ $(OBJ2) $(OBJ2).o $(CXX) $(CXXFLAGS) -o $@ $ $(OBJ3) $(OBJ3).o $(CXX) $(CXXFLAGS) -o $@ $ .cpp.o $(CXX) $(CXXFLAGS) -c $ $(OBJ2).o $(OBJ2).h $(OBJ3).o $(OBJ3).h .PHONY clean clean $(RM) *.o *~ $(OBJS) $(PROG) #eof とか 参考サイト SkillWiki
https://w.atwiki.jp/sugawara/pages/22.html
Mac OS X Tips NSStringとして持っている(複数行の)文字列中から1行の文字列を取り出す方法を説明する。 NSStringとNSScannerを使う。 // someStringには元の文字列が入っているものとする。 NSString *someString; // locationにはsomeStringの中の検索開始位置が入っているものとする。 unsigned int location = 0; NSRange lineRange = [string lineRangeForRange NSMakeRange(location, 0)]; // lineRangeに1行の文字列の範囲(改行コ−ドを含む)が入る。 NSString *lineString = [string substringWithRange lineRange]; // lineStringに1行の文字列(改行コ−ドを含む)が入る。 NSString *result = @""; // 改行コ−ドを取り除く { // 改行コ−ドに含まれる文字の一覧 NSString *returnCodes = @"?r?n"; NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString returnCodes]; // 改行コ−ドを取り除きたい文字列からNSScannerを用意する NSScanner *scanner = [NSScanner scannerWithString lineString]; // 改行コ−ド文字の直前までの文字列がresultに入る [scanner scanUpToCharactersFromSet charSet intoString result]; }
https://w.atwiki.jp/mpegonmac/pages/68.html
IntelのCPUで、1個のCPUのなかに、実は2個入っているもの。速い。最近はこれが主流になってきてるっぽい。 そのほかの主なデュアルコア PowerMacG5の中の人 PentiumD CerelonD Athlon64X2 用語辞典に戻る
https://w.atwiki.jp/oxon/pages/54.html
文書作成 テキストエディット? Carbon Emacs Emacs TeX/LaTeX Microsoft Word Office Open XML Converter Last Updated 2007-09-17
https://w.atwiki.jp/dawnofwar/pages/38.html
Defiler 種族Chaos 生産コスト 150 260 3 生産時間 30秒 生産場所 Machine Pit 生産に必要な条件 Desecrated Fortress 生産限界数 なし 体力 3300/0 分隊の人数 1/1 アーマー Vehicle Medium ユニットのサイズ 90 移動の早さ 16 視界の広さ 30(ステルス看破不可) 射撃用武器 Battlecannon, Twin-linked Autocannon, Heavy Flamer 接近用武器 Defiler Melee Attack
https://w.atwiki.jp/quasiquote/pages/13.html
* Runtime first-class macro Traditional macro S-expr = S-expr S式変換とマクロへのmapに分解。 ;Gauche (define-macro (swap! a b) `(let ((c ,a)) (set! ,a ,b) (set! ,b c))) (define swap! (macro (lambda (a b) `(let ((c ,a)) (set! ,a ,b) (set! ,b c))) Hygienic macro Env + S-expr = Env + S-expr S式変換、環境捕捉、マクロへのmapに分解。 ;R5RS (define-syntax begin0 (syntax-rules () ((_ a b ...) (let ((ret a)) (begin b ... ret))))) ; ... (2) (define begin0 (macro (lambda args ; ... (1) (hygiene-code `(let ((ret ,(car args)) (begin ,@(cdr args) ret))))) ; macro-dynamically enclosing environment ; AAA identifier AAA ; ---------------- ; VVV symbol VVV ; macro-statically enclosed environment ; | closure ... (1) ; | global environment (toplevel namespace/selected module) ... (2) (define storage (let ((sym (gensym))) (macro (lambda (x y) `((,x ,sym ,y))))) (storage define 4) (storage update! add1) ; update! in Gauche
https://w.atwiki.jp/macmini/pages/17.html
1. 搭載されているHDDと交換について 120GB Mac mini (MB463J/A) 320GB Mac mini (MB464J/A) SATA接続 HDD 2.5inch 5400rpm FUJITSU MHZ2120BH G1 FUJITSU MHZ2320BH G1 Hitachi HTS543212L9SA02 Hitachi HTS543232L9SA02 ロットによって採用されるHDDメーカは異なる可能性は有り。 ■結論 一般的な2.5inchのSATAのHDDを使用している為、より大容量で高速なSATA接続のHDDだけでなく、SSDにも変更することが可能である。 2. SSDへの交換について SSDとはNAND型フラッシュメモリを使用した書き換え可能な不揮発性の半導体メモリで、近年急速に大容量、高速化が進み、HDDに代わる注目のストレージデバイスである。 更にHDDと比べ低消費電力で、動作音も無音であるが、欠点として書き換え回数に寿命があり、記憶セル(ブロック)の書き換え数がSLC型で10万回、MLC型で1万回が限度と言われている。したがって、SSDの寿命を延ばすために、特定のセルへ書き込みが集中しないようにSSDのファームウエアではウエアレベリングと呼ばれる書き込みの平準化を行う工夫がなされている。 その為、ストレージをSSDに変更する際の代表的な注意点として、自動的にデフラグが実行するWindows Vistaでは、そのデフラグがSSDの寿命低下とウエアレベリングの妨害になる為、自動デフラグをオフにすることが推奨されている。 一方、OSXのネイティブなファイルシステムとしてはHFS+が採用されているが、10.2で耐障害性向上の為にジャーナル(ロギング)機能、10.3でそのジャーナル機能のオーバヘッドを解消する為、遅延再配置と頻繁に使用するデータを纏めてHDDの外周に配置し高速化するHot-File-Adaptive-Clusteringという機能が追加されている。この為、一般的には特に何もせずとも、断片化を気にすることなく、データアクセスも高速であると謳われている。 ただし、断片化については考慮する必要があり、場合によってはデフラグも有効で、iDefragといった断片化解消のソフトも市販されている。 OSXではデフラグ行為は行わない為、ウエアレベリングの邪魔をすることはないが、ジャーナルが有効になっていると、 一旦、ジャーナルエリアに書き込みをしてから、実際のデータの反映の為ファイルシステムへの変更/完了のコミットをする為、書き込み回数が多くなる SSDにはHDDとは異なり磁気ディスク円盤の外周という概念がないため、データを纏めて外周に配置する行為は意味がなく、ウエアレベリングの邪魔をしている ということになり、SSDに交換した場合には下記の通り、ジャーナルを無効にした方がSSDの寿命を長くすることができる。 % sudo diskutil disableJournal / なお、ジャーナルを無効にすると動的なパーティションサイズの変更ができなくなり、BootCampアシスタントが動作しなくなる。Windowsパーティションのサイズを変更したり、インストールし直す場合は下記の通り、ジャーナルを再度有効化する。 % sudo diskutil enableJournal / ■結論 ジャーナルを無効にすることにより、データ書き込み中の不意のハングアップや電源断でデータをロストする可能性がある。しかしながら、OS自体が安定している為、データの整合性、保証を最優先するファイルサーバ用途などの使用で無い限りは実用上問題無いレベルである(そもそも10.2まではジャーナル機能自体存在しない)。 その為、SSDに交換した場合は、SSDの寿命を必要以上に縮めない為に、ジャーナル機能の無効化が有用である。 ■追記. Samsung SSDをTrim対応にアップデートする (2010/1/11) SAMSUNG製のSerial ATA対応2.5インチ高速SSD PB22-J MMCREシリーズ(搭載コントローラ S3C29RBB01-YK40/DRAMキャッシュメモリ 128MB)にTrimコマンド対応モデルの店頭販売が開始された。 既存製品もファームウエアのアップデートでTrimコマンドに対応できる。Trimコマンドに対応したファームウエアのバージョンはVBM1901Q以降。なお、ファームウェアアップデート時にはデータが消去されるのでバックアップを取った上、行うこと。 Ver. 2.16-January-20101. Drive Model - 2.5” 256GB MLC SSD MMCRE56G5MXP-0VB (ReadMax 220MB/sec, WriteMax 200MB/sec) - 2.5” 128GB MLC SSD MMCRE28G5MXP-0VB (ReadMax 220MB/sec, WriteMax 200MB/sec) - 2.5” 64GB MLC SSD MMCRE64G5MXP-0VB (ReadMax 220MB/sec, WriteMax 120MB/sec) 2. Firmware Version - Old version VBM18C1Q or VBM1801Q (Before Update) - New version VBM19C1Q or VBM1901Q (After Update) 3. HDDの接続モードについて OSXとそれ以外のOSによってHDDの接続モードが異なる。 これは、PCIのベンダID、デバイスIDを確認するとわかるが、起動OSを変更するとディスクコントローラのデバイスIDが変わっている。仕組みとしては、PRAMに起動ディスクの情報が保持される為、ここを参照し、起動するOSがOSXであればAHCI、そうでなければ、IDE互換モードと切り替えていると思われる。 イメージ的にはPCでは、BIOSでIDE互換モードとAHCIモードを手動で切り替えることができるが、これを起動時に自動的に実行していることに相当する。 OSX その他 ベンダID 0x10de NVIDA デバイスID 0x0ab9 AHCI デバイスID 0x0ab4 IDE互換 その為、Windows XP/Vistaなどで動作させる場合には、XPでもAHCIのドライバを用意する必要がなく、予めドライバ統合をしたり、F6でOSインストール時にAHCIドライバをする必要がない。逆にいえば、デイバスIDがIDE互換となってしまっている為、IDE互換モードでしか動作できず、AHCIドライバに変更することはできない。 公称スペックでRead 220MB/s Write 200MB/sと高速なSSD(Samsun製 PB-22J MMDOE56G5MXP-0VB)を使用した場合、OSクリーンインストール直後で、Read 200MB/s、Write 190MB/sまでは出ることは確認できた。 ■結論 OSX以外ではディスクコントローラはIDE互換モードで動作し、最高でATA-7 UDMA7として認識され、規格上の150MB/sを超える速度を出すことは出来ているが、あくまでIDE互換としてエミュレートする分のオーバヘッドが発生するため、SSDなどの高速なデバイスを使用した場合は本来のパフォーマンスを引き出すことができない。 一方、OSXではAHCIで動作している為、SATAのNCQなど利用でき、デバイス本来のパフォーマンスを引き出すことができる。 4. パフォーマンスアップデータ 2009/10/14に「ハードディスクドライブに起因する間欠的な動作速度低下解決」に関するパフォーマンスアップデータが提供された。アップデート内容からAHCI DISK BIOSのアップデートかと思われたが、アップデータファイルの中を覗くと、10.5.8/10.6.1用カーネル拡張(kext)のIOAHCIBlockStorage.kextの更新であり、ファームウエアのアップデートなどは含まれていなかった。 実行環境> MainMachine Apple Mac mini (MB463J/A) Memory 8GB(4GBx2) SanMax SMD-N4G68HP-10F DDR3-1066 S.O.DIMM 4GB CL7 hynix/JEDEC SSD 256GB SAMSUNG PB-22J (MMDOE56G5MXP-0VB) ODD Blu-ray Read Super Drive Sony NEC Optiarc BC-5600S Slim Combo Drive OS OSX 10.5.8/10.6.1(64bit kernel) GPT Partion (Leopard10.5.8 128GB/Snow Leopard 10.6.1 128GB) / enableJournal ■結論 ジャーナルログを有効にし、XbnechのDisk Testをパッチ適用前後で複数回行ってみたが10.5.8では、4K blocksのUncached Writeにおいてパフォーマンス向上が見られたが、それ以外は特に有意な差は見られなかった。 10.6.1で変化が見られなかったことを考慮すると、Leopard(10.5.8)におけるシーケンシャルデータの書き込み遅延を解消する効果が期待できる。ただし、ランダムデータの書き込みには変化が無いことから、SSD環境におけるプチフリ防止のパッチとは言えないだろう。 なお、ファームウエアのアップデートでは無いため、該当のOSバージョン以前のものやBoot CampでのWindows環境などには影響を与えない。 5. 内蔵HDDディスクを2台にする Late 2009のSnow LeopardサーバモデルのHDDはDual 500GBとなっており、内蔵の光学式ドライブを取り去り、HDDをもう一台追加している。 増設方式は下図の通りであり、2.5inch HDD SATA→スリムラインSATAの変換アダプタを使用したものである。 同様の方法の変換アダプタは既に発売されているが、いずれも、2.5inch IDE→SATAもしくは2.5ich SATA→SATAと、スリムラインSATAではなく、SATAに変換されてしまい使用できない。 そこで、調べた所、ThinkPad X200 ウルトラベースにHDDを増設する為のアダプタ、ThinkPad SATA ハードディスクドライブ・ベイアダプター3(43N3412) が2.5inch SATA- スリムラインSATA変換であることがわかった(米国サイトの記載の方が詳しい)。 しかしながら、内蔵する為には、光学式ドライブのサイズの奥行き129mm x 高さ12.7mm x 幅129mmと同一である必要があるのだが、ウルトラベース内蔵として設計されている為、奥行き133 mm x 高さ10.5mm x 幅128mmと奥行きが5mm長くなっており、寸法的にはアダプタの正面を5mm削る必要がある。 ■追記. 変換アダプタと元の光学ドライブとの比較(2009/10/24) 上が2.5ich SATA HDD→スリムラインSATA変換アダプタ ThinkPad SATA ハードディスクドライブ・ベイアダプター III、下が元の内蔵スーパーマルチドライブである。 6. 12.5mm 1TBのHDDを内蔵する 2.5インチ 1TB HDD 12.5mm厚(AFT) WD Scorpio Blue WD10TPVTを12.7mmのスリムドライブに変換する、スリムドライブベイHDDアダプタSlimBay12.7SA-HDD.SA (128mm W x 12.7mm H x 127mm D) を使用することで、Mac miniのSuperDrive(128mm W x 12.7mm H x 127mm D) と交換可能である。 12.5mm厚の2.5inch HDDを格納。 レノボ・ジャパン ThinkPad SATA ハードディスクドライブ・ベイアダプターIII 43N3412(128mm W x H10.5mm x D133 mm) 【写真・左】 SlimBay12.7SA-HDD.SA (128mm W x 12.7mm H x 127mm D) 【写真・右】 フロントベゼルが汎用的にフラットなタイプになった為、従来のハードディスクドライブ・ベイアダプターIIIと比較して奥行きが短くなり、スリムベイHDDアダプタは光学ドライブと全く同一サイズになった。また、高さも従来の10.5mmから12.7mmになり、12.5mm厚のHDDが収納できる。【写真・下】(ベイアダプタを重ね奥行きを比較) もちろん、9.5mm厚のHDDにも対応。 スリムベイHDDアダプタにはフロントベゼルが付属するが、Mac miniにはフロントベゼルをはずした状態で内蔵させる(元のSuperDriveにもフロントベゼル付属していない)。 Mac miniでは関係ないが、一部ノートPCなど内蔵光学式ドライブが9.5mm厚のスリムタイプの場合があるので、その場合は9.5mm厚専用のSlimBay9.5SA-HDD.SAを使用する。 ベンチーマーク結果 1. WDC WD10TPVT-00HT5T0 1TB(2.5inch/12.5mm/5200rpm/8MB/4096byte), Advanced Format Drive) デフォルトで物理クラスタサイズが1セクタ4096byteに変更されたAdvance Format Techonogyを使用。室温25℃でのHDD平均使用温度は38℃。 ・2TBを超えろ! ATAディスクの4Kセクタ問題とは? 2. Hitach HDS545050B9A300 500GB(2.5inch/9.5mm/5400rpm/8MB/512byte) 従来の物理クラスタサイズが1セクタ512byte。室温25℃での平均使用温度は42℃。 3. WDC WD20EARS-00S8B1 2TB(3.5inch/26.1mm/5400rpm/64MB/512byte) 戻る
https://w.atwiki.jp/wiki2_okumura/pages/87.html
port版rubyを使う そのままだと標準のrubyが勝ってしまいます。こいつはちょっと古いのでそのままじゃ気持ち悪い。てことで、portで入れた最新版に移行します。 sudo mv /usr/bin/ruby /usr/bin/ruby_1.8.2 以下はせっかく書いたのに消えちゃった諸々...TT 覚えてる範囲のメモ書きです。 RubyGemsをインストール RubyGemsのインストールページ落としてきて、解凍して、その中で以下のコマンドを実行... ruby install.rb ですんなり入ったはず...苦労した記憶は無いので、それでいけるでしょう。たぶん。 rakeをインストール gem一発。 gem install rake ...だったかなぁ? redmine取得 色々苦労した...んですが、もううろ覚え。ま、覚えてる範囲で。 まず、入手。gemで入れたのはうまく動かず、RubyForgのRedMineから落とした奴が動いた...はず。 これを解凍して、後はtrac?用に入れていたSQLite3で動く用にdemo環境で動かした。 DB初期化 rake db migrate RAILS_ENV="demo" rake load_default_data RAILS_ENV="demo" 途中、 Select language bg, de, en, es, fr, it, ja, nl, pt, pt-br, sv, zh [en] みたいに聞いて来たんで、jaと答えておきました。 で、終わったら設定完了。後は、 ruby script/server -e demo としたら動くはず。http //localhost 3000/にアクセスして、画面から初期設定できます。 初期ユーザとして、ID/PWがadmin/adminのユーザがいるんで、こいつで入ってまずはパスワードとこのユーザの言語を変更します。 後は、プロジェクトをたててみたり、管理ページからちょっと弄ってみたり、ユーザを登録してみたり。